home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 3 / Info_Mac_1994-01.iso / Development / Source / Sleep Deprivation 1.0 Source / Sleep Deprivation ƒ / sd code ƒ / sd environment.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-11-12  |  2.5 KB  |  88 lines  |  [TEXT/KAHL]

  1. /**********************************************************************\
  2.  
  3. File:        sd environment.c
  4.  
  5. Purpose:    This module handles environment checking (this INIT will
  6.             only work on Macs which can sleep).
  7.  
  8.  
  9. Sleep Deprivation -- graphic effects on sleep
  10. Copyright (C) 1993 Mark Pilgrim & Dave Blumenthal
  11.  
  12. This program is free software; you can redistribute it and/or modify
  13. it under the terms of the GNU General Public License as published by
  14. the Free Software Foundation; either version 2 of the License, or
  15. (at your option) any later version.
  16.  
  17. This program is distributed in the hope that it will be useful,
  18. but WITHOUT ANY WARRANTY; without even the implied warranty of
  19. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20. GNU General Public License for more details.
  21.  
  22. You should have received a copy of the GNU General Public License
  23. along with this program in a file named "GNU General Public License".
  24. If not, write to the Free Software Foundation, 675 Mass Ave,
  25. Cambridge, MA 02139, USA.
  26.  
  27. \**********************************************************************/
  28.  
  29. #include "Traps.h"
  30. #include "GestaltEQU.h"
  31. #include "sd environment.h"
  32. #include "sd init.h"
  33.  
  34. /* Dave says: */
  35. /* The following will stop the compiler from using Gestalt glue without */
  36. /* killing all the other pre-system 7 glue for other routines. */
  37. /* Mark says: wow, the following just impresses the s--- out of me */
  38. #pragma parameter __D0 RealGestalt(__D0,__A1)
  39. pascal OSErr RealGestalt(OSType selector,long *response) = {0xA1AD,0x2288};
  40. #define Gestalt            RealGestalt
  41. #define GESTALT_TRAP    _Gestalt
  42.  
  43. #define GetTrapType(T)    (((T&0x0800)>0) ? ToolTrap : OSTrap)
  44.  
  45. void PrepareEnvironment(void)
  46. {
  47.     saveZone = GetZone();
  48.     SetZone(SysZone);
  49. }
  50.  
  51. void RestoreEnvironment(void)
  52. {
  53.     SetZone(saveZone);
  54. }
  55.  
  56. Boolean OkayEnvironmentQQ(void)
  57. {
  58.     OSErr            isHuman;
  59.     long            gestaltReturn;
  60.     
  61.     if (TrapAvailable(GESTALT_TRAP))
  62.     {
  63.         isHuman=Gestalt(gestaltPowerMgrAttr, &gestaltReturn);
  64.         return ((!isHuman) && (gestaltReturn&(1<<gestaltPMgrCPUIdle)));
  65.     }
  66.     else
  67.         return TrapAvailable(_IdleUpdate);
  68. }
  69.  
  70. Boolean TrapAvailable(int theTrap)
  71. {
  72.     /* figure out if a particular trap is available; this code is completely */
  73.     /* opaque to me  -MP */
  74.     
  75.     TrapType        theTrapType;
  76.     
  77.     theTrapType=GetTrapType(theTrap);
  78.     if (theTrapType==ToolTrap)
  79.     {
  80.         theTrap&=0x07FF;
  81.         if(theTrap>=((NGetTrapAddress(_InitGraf, ToolTrap)==
  82.                     NGetTrapAddress(0xAA6E, ToolTrap)) ? 0x0200    : 0x0400))
  83.             theTrap=_Unimplemented;
  84.     }
  85.     return (NGetTrapAddress(theTrap, theTrapType)!=
  86.             NGetTrapAddress(_Unimplemented, ToolTrap));
  87. }
  88.